## getopt()
В приведённом ниже пример программы getopt() используется два параметра программы: -n без значения и -t значение со значением.

```cpp
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
    int flags, opt;
    int nsecs, tfnd;
    nsecs = 0;
    tfnd = 0;
    flags = 0;
    while ((opt = getopt(argc, argv, "nt:")) != -1) {
        switch (opt) {
        case 'n':
            flags = 1;
            break;
        case 't':
            nsecs = atoi(optarg);
            tfnd = 1;
            break;
        default: /* '?' */
            fprintf(stderr, "Использование: %s [-t nsecs] [-n] имя\n",
                    argv[0]);
            exit(EXIT_FAILURE);
        }
    }
    printf("flags=%d; tfnd=%d; nsecs=%d; optind=%d\n",
            flags, tfnd, nsecs, optind);
    if (optind >= argc) {
        fprintf(stderr, "После параметра требуется значение\n");
        exit(EXIT_FAILURE);
    }
    printf("параметр = %s\n", argv[optind]);
    /* остальной код не показан */
    exit(EXIT_SUCCESS);
}
```

## getopt_long()
Приведенный ниже пример программы иллюстрирует использование большинства возможностей getopt_long().
```cpp
#include <stdio.h>     /* printf */
#include <stdlib.h>    /* exit */
#include <getopt.h>
int
main(int argc, char **argv)
{
    int c;
    int digit_optind = 0;
    while (1) {
        int this_option_optind = optind ? optind : 1;
        int option_index = 0;
        static struct option long_options[] = {
            {"add",     required_argument, 0,  0 },
            {"append",  no_argument,       0,  0 },
            {"delete",  required_argument, 0,  0 },
            {"verbose", no_argument,       0,  0 },
            {"create",  required_argument, 0, 'c'},
            {"file",    required_argument, 0,  0 },
            {0,         0,                 0,  0 }
        };
        c = getopt_long(argc, argv, "abc:d:012",
                 long_options, &option_index);
        if (c == -1)
            break;
        switch (c) {
        case 0:
            printf("параметр %s", long_options[option_index].name);
            if (optarg)
                printf(" со значением %s", optarg);
            printf("\n");
            break;
        case '0':
        case '1':
        case '2':
            if (digit_optind != 0 && digit_optind != this_option_optind)
              printf("Встречена цифра в двух различных элементах argv.\n");
            digit_optind = this_option_optind;
            printf("параметр %c\n", c);
            break;
        case 'a':
            printf("параметр a\n");
            break;
        case 'b':
            printf("параметр b\n");
            break;
        case 'c':
            printf("параметр c со значением «%s»\n", optarg);
            break;
        case 'd':
            printf("параметр d со значением «%s»\n", optarg);
            break;
        case '?':
            break;
        default:
            printf("?? getopt вернула код символа 0%o ??\n", c);
        }
    }
    if (optind < argc) {
        printf("элементы ARGV не параметры: ");
        while (optind < argc)
            printf("%s ", argv[optind++]);
        printf("\n");
    }
    exit(EXIT_SUCCESS);
}
```
